/*
  学习目标：模拟实现路由效果
  需求: url和组件, 一一对应, 同时只显示一个
  步骤：
     1. 声明状态url, 保存/home  /my  /friend
     2. 做条件渲染, 保证互斥效果, 同时只能显示一个
     3. 挂载后, 开启监听url变化事件
*/

import React from 'react';

export default class App extends React.Component {
  // 1. 声明状态url, 保存/home  /my  /friend
  state = {
    url: '/home',
  };

  componentDidMount() {
    // 3. 挂载后, 开启监听url变化事件
    window.addEventListener('hashchange', () => {
      const hash = window.location.hash.slice(1);
      this.setState({ url: hash });
    });
  }

  render() {
    const { url } = this.state;
    return (
      <div>
        <h1>app组件</h1>
        <ul>
          <li>
            <a href="#/home">首页</a>
          </li>
          <li>
            <a href="#/my">我的音乐</a>
          </li>
          <li>
            <a href="#/friend">我的朋友</a>
          </li>
        </ul>

        {/* // 2. 做条件渲染, 保证互斥效果, 同时只能显示一个 */}
        {url === '/home' && <Home />}
        {url === '/my' && <MyMusic />}
        {url === '/friend' && <Friend />}
      </div>
    );
  }
}

function Home() {
  return <h1>我是首页组件</h1>;
}

function MyMusic() {
  return <h1>我是我的音乐件</h1>;
}

function Friend() {
  return <h1>我是朋友组件</h1>;
}
